不知不覺就來到最後一天了,今天我們來介紹Solisity的條件判斷式和迴圈吧
程式碼如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract IfElse {
function foo(uint x) public pure returns (uint) {
if (x < 10) {
return 0;
} else if (x < 20) {
return 1;
} else {
return 2;
}
}
function ternary(uint _x) public pure returns (uint) {
return _x < 10 ? 1 : 2;
}
}
來看看程式碼的內容:
function foo(uint x) public pure returns (uint) {
if (x < 10) {
return 0;
} else if (x < 20) {
return 1;
} else {
return 2;
}
}
首先,宣告名稱為foo
的函式,並接受x
的變數,接著進入到函式主體的部分:
當x
符合小於10的條件時,函式會回傳0
;
當x
不符合小於10的條件,但是符合小於20的條件時,函式會回傳1
;
當x
不符合小於10的條件,也不符合小於20的條件時,函式會回傳2
。
pure
, view
)pure
或view
,pure
表示的是該函式不涉及任何合約上的變數讀取,view
的意思則是會讀取合約內的變數,但不會改變合約內的值。function ternary(uint _x) public pure returns (uint) {
return _x < 10 ? 1 : 2;
}
這段程式碼一樣也是條件判斷式,只是為簡化的寫法:
判斷_x
是否小於10,如果_x
符合小於10的條件,則回傳1
;反之回傳2
。
等同於下列程式碼:
function ternary(uint _x) public pure returns (uint) {
if (_x < 10) {
return 1;
}
return 2;
}
程式碼如下:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract ForLoop {
function loop() public {
for (uint i = 0; i < 10; i++) {
statement(s);
}
}
}
首先,我們宣告一個 loop
函式,接著在函式寫入 for
迴圈,for
迴圈的規則為(初始值;終止條件;數值更改),以上面程式碼舉例,先宣告一個變數 i
其值為0 , 當變數 i
的值符合小於10的條件,for
迴圈就會持續運作下去,並且執行 { }
內的指令,每做完一次 i
就會 +1
。
所以,上述的 for
迴圈總共會執行10次,從 i = 0
到 i = 9
。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract WhileLoop {
function loop() public {
uint j = 0;
while (j < 10) {
j++;
}
}
}
接下來換 while
迴圈,一樣先宣告一個 loop
函式,接著在函式寫入 while
迴圈,while
的規則是必須符合 while
後面括號內的條件,以上面的程式碼做舉例, 先宣告一個變數 j
其值為0,當 j
符合括號內的條件,也就是(j < 10)
,while
迴圈就會持續運作下去,並且執行 { }
內的指令(j++
)。
因此,上述的 while
迴圈總共會執行10次,從 j = 0
到 j = 9
。
另外,迴圈常常會搭配 continue
和 break
一起使用。
continue
:回到迴圈的一開始,重新執行。break
:中斷迴圈。
拿 for
迴圈做舉例
contract ForLoop {
function loop() public {
for (uint i = 0; i < 10; i++) {
if (i == 3) {
continue;
}
if (i == 5) {
break;
}
}
}
}
上述程式碼會總共執行6次,從 i = 0
到 i = 5
。
參考資料:https://solidity-by-example.org/loop/